import {debounce} from '@utils/util'
export default {
  data() {
    return {
      $_sidebarElm: null,
      $_resizeHandler: null
    }
  },
  mounted() {
    this.initListener()
  },
  activated() {
    if (!this.$_resizeHandler) {
      // avoid duplication init
      this.initListener()
    }
    // when keep-alive chart activated, auto resize
    this.resize()
  },
  beforeDestroy() {
    this.destroyListener()
  },
  deactivated() {
    this.destroyListener()
  },
  methods: {
    $_sidebarResizeHandler(e) {
      if (e.propertyName === 'width') {
        this.$_resizeHandler()
      }
    },
    initListener() {
      this.$_resizeHandler = debounce(() => {
        this.resize()
      }, 100)
      window.addEventListener('resize', this.$_resizeHandler)
      this.$_sidebarElm = document.getElementsByClassName('sidebar-container')[0]
      this.$_sidebarElm && this.$_sidebarElm.addEventListener('transitionend', this.$_sidebarResizeHandler)
    },
    destroyListener() {
      window.removeEventListener('resize', this.$_resizeHandler)
      this.$_resizeHandler = null
      this.$_sidebarElm && this.$_sidebarElm.removeEventListener('transitionend', this.$_sidebarResizeHandler)
    },
    resize() {
      const {chart, initChart, $resizeHandler} = this
      chart && chart.resize && chart.resize()
      if (typeof $resizeHandler === 'function') $resizeHandler()
      if (typeof initChart === 'function') initChart()
    },
    // 获取屏幕单位宽高
    getScreenUint() {
      let {clientWidth, clientHeight} = document.documentElement
      let vh = clientHeight / 100
      let vw = clientWidth / 100
      return {
        vh,
        vw
      }
    },
    //根据单位计算实际值
    formatSize(value) {
      let size = parseFloat(value);
      let {vh, vw} = this.getScreenUint();
      if (typeof value === "string" && ~value.indexOf("vh")) {
        return vh * size;
      }
      if (typeof value === "string" && ~value.indexOf("vw")) {
        return vw * size;
      }
      return size;
    }
  }
}